瞭解任務與資料的平行處理功能
因為多核心處理器,平行程式設計 parallel programing 是將來很重要的趨勢
Task / Data 任務與資料的平行處理
1.資料平行處理
通過資料分解,讓不同處理器做同一工作@example : 大量資料處理(例:圖像中的許多像素),把資料分解,並交給多個處理器進行處理
這一直是超級電腦擅長的領域,且"資料平行處理"重視程度遠超過"任務平行處理"
2.任務平行處理
同一資料有多個任務需要進行 (對任務進行分解)@example : 不同處理器針對 "同一資料集" 分別計算不同答案
很大的資料集想知道該資料集的最小值、最大值、平均值
- 管線操作 :有多個任務需要完成 (不是讓每個任務對資料進行獨立操作)
Data => T1 => T2 => T3
- 圖像處理器常使用 :
Data => 應用濾鏡 => 聚焦 => 白平衡
1967 Amdahl's Law
速度的提升受程式中 "串列部分" (程式中不能並行執行的部分)的限制
串列部分的執行時間不會縮短
固定工作量,看時間
--------
| 100s | 不能改變的串列
--------
--------
| 100s | 可以改變的串列
--------
--------
| 100s | 不能改變的串列
--------
total : 300s
=>
--------
| 100s | 不能改變的串列
--------
------- -------
| 50s | + | 50s | 可以改變的串列
------- -------
--------
| 100s | 不能改變的串列
--------
total : 250s
由此觀點 : 多核心和平行處理終有極限,好像沒有想像中那麼厲害耶!
= = = = = 反駁 = = = = =
1988 Gustafson
換個角度看 :
電腦所做的工作每年都在變化,資料要處理的量也越來越多
如果固定時間,看工作量
執行時間 : 500s
-----------
| 100 bit | 不能改變的串列
-----------
-----------
| 100 bit | 可以改變的串列
-----------
-----------
| 100 bit | 不能改變的串列
-----------
total 工作量 : 300 bit
=>
執行時間 : 500s
-----------
| 100 bit | 不能改變的串列
-----------
----------- -----------
| 100 bit | + | 100 bit | 可以改變的串列
----------- -----------
-----------
| 100 bit | 不能改變的串列
-----------
total 工作量 : 400 bit
不斷增加需要完成的工作量(這正是電腦發展中的實際狀況) ,串列部分對我們的影響將逐漸減弱
運行速度將隨著處理器數量的增加而迅速提升
這就是超級電腦能成功運用並行技術的關鍵